package com.maozzi.api.acl;

import com.maozzi.api.acl.model.AclUserDTO;
import com.maozzi.api.acl.model.PermissionDTO;
import com.maozzi.api.acl.model.RoleDTO;
import com.maozzi.common.exception.BizException;
import com.maozzi.common.model.PageParam;
import com.maozzi.common.model.PageDTO;

import java.util.List;

/**
 * 权限 - service
 *
 * @author maozi
 */
public interface AclService {

    /**
     * 查询用户所有信息，包括角色权限信息
     *
     * @param userId 用户ID
     * @return 返回
     * @throws BizException 业务异常
     */
    AclUserDTO getAclUser(Long userId) throws BizException;

    /**
     * 查询用户的管理员角色
     *
     * @param userId 用户ID
     * @return 返回
     * @throws BizException 业务异常
     */
    List<RoleDTO> getUserRole(Long userId) throws BizException;

    /**
     * 查询用户的权限集合
     *
     * @param userId 用户ID
     * @return 返回
     * @throws BizException 业务异常
     */
    List<PermissionDTO> getUserPermission(Long userId) throws BizException;

    /**
     * 保存用户橘色
     *
     * @param aclUserDTO 参数
     * @return true - 成功
     * @throws BizException 业务异常
     */
    Boolean putUserRole(AclUserDTO aclUserDTO) throws BizException;

    /**
     * 编辑用户角色
     *
     * @param userId     用户ID
     * @param aclUserDTO 参数
     * @return true - 成功
     * @throws BizException 业务异常
     */
    Boolean editUserRole(Long userId, AclUserDTO aclUserDTO) throws BizException;

    /**
     * 删除用户管理员身份
     *
     * @param userId 用户ID
     * @throws BizException 业务异常
     */
    void delUserRole(Long userId) throws BizException;

    /**
     * 查询角色
     *
     * @param roleId 角色ID
     * @return 返回
     * @throws BizException 业务异常
     */
    RoleDTO getRole(Long roleId) throws BizException;

    /**
     * 保存角色
     *
     * @param roleDTO 参数
     * @return 返回
     * @throws BizException 业务异常
     */
    RoleDTO putRole(RoleDTO roleDTO) throws BizException;

    /**
     * 编辑角色
     *
     * @param roleId  角色ID
     * @param roleDTO 参数
     * @return true - 成功
     * @throws BizException 业务异常
     */
    Boolean editRole(Long roleId, RoleDTO roleDTO) throws BizException;

    /**
     * 删除角色
     *
     * @param roleId 角色ID
     * @return true - 成功
     * @throws BizException 业务异常
     */
    Boolean delRole(Long roleId) throws BizException;

    /**
     * 查询权限
     *
     * @param permissionId 权限ID
     * @return 返回
     * @throws BizException 业务异常
     */
    PermissionDTO getPermission(Long permissionId) throws BizException;

    /**
     * 保存权限
     *
     * @param permissionDTO 参数
     * @return 返回
     * @throws BizException 业务异常
     */
    PermissionDTO putPermission(PermissionDTO permissionDTO) throws BizException;

    /**
     * 编辑权限
     *
     * @param permissionId  权限ID
     * @param permissionDTO 参数
     * @return true - 成功
     * @throws BizException 业务异常
     */
    Boolean editPermission(Long permissionId, PermissionDTO permissionDTO) throws BizException;

    /**
     * 删除权限
     *
     * @param permissionId 权限ID
     * @return true - 成功
     * @throws BizException 业务异常
     */
    Boolean delPermission(Long permissionId) throws BizException;

    /**
     * 角色分页
     *
     * @param roleDTO   查询条件
     * @param pageParam 分页参数
     * @return 返回
     * @throws BizException 业务异常
     */
    PageDTO<RoleDTO> rolePage(RoleDTO roleDTO, PageParam pageParam) throws BizException;
}
